plinstrument:
{
calc:"
// (based on BL2 Blinder)

#include	ledref
#include	o_pix
#include	o_shutter


// controls
cMod;
cDim; cSht; cEfc; cEfs; cBlk;

// parameters
pMod;

// constants
kDia = sqrt(0.6 * 0.3 / M_PI) * 2;	// (equivalent diameter from area)
kWid = 0.646;
kHi = 0.350;
kZBack = 0.07;
kZFront = -0.07;

kCnt  = 2;
kSpd  = Spread(kCnt, 0.1, 81);	// (?)
kSpdH = kSpd;
kSpdV = kSpd;
kSource = LEDRefConv(24*15, kDia, kLEDRefWatt_RGB, kLEDRefDia_RGB, kLEDRefSrc_RGB);


// protocol parameters
LIGHT;
SHAPE;
CTLS;

PRM=1;
CTL;


// pix
kBlks = 24;

gPix = PixNew(kBlks);

PixTime#
(
	(pMod < 2)?
	(
		b = cBlk[0];
		c = Vec(b.cR / 255, b.cG / 255, b.cB / 255);
		PixSetAll(gPix, c);
	)
	:
	(
		@(i < kBlks)
		(
			b = cBlk[i];
			c = Vec(b.cR / 255, b.cG / 255, b.cB / 255);
			PixSet(gPix, i, c);
			++i;
		);
	);
);


// dimmer

gDimmer;

DimmerTime#
(
	(pMod == 1)?
	(
		gDimmer = cDim / 255;
	)
	:
	(
		gDimmer = 1;
	);
);


// shutter

gShutter = ShutterNew(1, 30, 1/31);

ShutterTime#
(
	(pMod == 1)?
	(
		(cSht < 1)?	// (?)
		(
			ShutterOpen(gShutter);
		)
		:
		(
			ShutterStrobe(gShutter, $0, CtlN(1, 255, cSht));
		);
	)
	:
	(
		ShutterOpen(gShutter);
	);
);


// protocol methods


UPDATE#
(
	PixTime($0);
	DimmerTime($0);
	ShutterTime($0);

	PRM?
	(
		// shape
		hw = kWid * 0.5;
		hh = kHi * 0.5;
		SHAPE = Box(-hw, hw, -hh, hh, kZBack, kZFront);
			
		cMod = pMod;
		CTLS = 1;

		l = LIGHT[0];
		l.pos[2] = kZFront;
		l.dia = kDia;
		l.spdh = kSpdH;
		l.spdv = kSpdV;
		l.cnt = kCnt;
		LIGHT[0] = l;
	);

//	(PRM | CTL)?
	(
		c = PixAverage(gPix);
		c = VecScale(c, kSource * gDimmer * gShutter.cur);

		l = LIGHT[0];
		l.color = c;
		LIGHT[0] = l;
	);

	PRM = CTL = 0;
);

";


chmap:
"cBlk(cR cG cB)[1]",
"cDim cSht cEfc cEfs cBlk(cR cG cB)[1]",
"cBlk(cR cG cB)[24]";


ctlprop:
{
	ctls:
	{
		id:cBlks;
		label:Segment;
	},
	{
		id:cEfc;
		name:Effect;
	},
	{
		id:cEfs;
		name:Speed;
	};
};


prm:
{
	controls:
	{
		type:selector;
		id:pMod;
		name:Mode;
		ini:0;
		items:
		{
			text:3ch;
			value:0;
		},
		{
			text:7ch;
			value:1;
		},
		{
			text:72ch;
			value:2;
		};
	};
};


};
